<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;

/**
 * 示例接口
 */
class Demo extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['*'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['test2'];

     //添加
     public function stu_add()  {  
        // 从POST请求中获取数据  
        $params_name = $this->request->post("student_name");  
        $params_class = $this->request->post("student_class");  
        $params_number = $this->request->post("student_number");  
        $student_score = $this->request->post("student_score");  
        
        // 检查student_score是否在0到100之间  
        if (!is_numeric($student_score) || $student_score < 0 || $student_score > 100) {  
            // 如果不在范围内，给出报错  
            $this->error('学生成绩必须在0到100之间');  
        }  
    
        // 构造要插入的数据  
        $data = array(  
            'student_name' => $params_name,  
            'student_class' => $params_class,  
            'student_number' => $params_number,  
            // 如果需要存储成绩，也可以添加这一行，但注意这里可能不需要，因为上面的逻辑已经确保了score的有效性  
            'student_score' => $student_score, // 如果数据库表有这个字段且需要存储  
        );      
    
        // 写入数据到数据库  
        $res = Db::name('student_score')->insert($data);  
    
        // 根据插入结果给出反馈  
        if ($res) {  
            $this->success('添加成功', $res);  
        } else {  
            $this->error('添加失败');  
        }  
    }  

     //批量添加
     public function stu_addMore(){
        //批量添加一般传入的数据都为数组
        $params = $this->request->param('arr/a');
 
       //查看当前参数传入数据
       //$this->success('ok',$params);
       //判断当前传入数据是否为数组形式
        if (!is_array($params)){
            $this->error('数据格式错误');
        }
 
        try {
            //批量添加数据
            $res = Db::name('student_score')->insertAll($params);
 
            if ($res){
                $this->success("插入成功".$res."条",$res);
            }else{
                $this->error('插入失败');
            }
        }catch (Exception $e){
            $this->error('插入失败',$e->getMessage());
        }
 
    }

    //查询数据
    public function get_stu(){
        $data = model('admin/student_score')->select();
        $this->success('ok',$data);
    }

    //条件查询数据
    public function get_stu_by(){
        //参数传递字段name
        $id = input('id','');
        $student_name = input('student_name','');
        $student_class = input('student_class','');
        $student_number = input('student_number','');
        $where = [];
        if ($student_name){
            $where['student_name'] =['like',"%$student_name%"];
        }
        if ($student_class){
            $where['student_class'] =['like',"%$student_class%"];
        }
        if ($student_number){
            $where['student_number'] =['like',"%$student_number%"];
        }
        if ($id){
            $where['id'] =['like',"$id"];
        }
        $data = model('admin/student_score')->where($where)->select();
        $this->success('成功',$data);
    }

     
    //删除数据，根据id单个删除
    public function del_stu(){
        $id = input('id','');
 
        if (!$id){
            $this->error('缺少参数id');
        }
 
       $res =  model('admin/student_score')->where('id',$id)->delete();
        if ($res){
            $this->success('删除成功',$res);
        }
        $this->error('删除失败',$res);
    }

    public function del_stu_ids(){  
        $ids = input('ids/a', []); // 尝试从请求中获取ids数组，如果未找到则返回空数组  
        if (empty($ids)) {  
         $this->error('缺少参数ids'); // 注意这里检查的是$ids而不是$id  
        }  
  
        $res = model('admin/student_score')->where('id', 'in', $ids)->delete();  
        if ($res) {  
         $this->success('删除成功', $res);  
        } else {  
            $this->error('删除失败', $res);  
        }  
    }

    //删除数据，根据name删除
    public function del_stu_byName()  {  
        $student_name = input('student_name', '');  
        
        if (!$student_name) {  
            $this->error('缺少参数 student_name');  
        }  

        // 使用参数化查询来避免 SQL 注入（具体实现取决于您使用的数据库框架）  
        // 这里假设 model 方法支持参数化查询，如果不支持，请自行实现或使用其他方法  
        $res = model('admin/student_score')->where('student_name', 'like', "%{$student_name}%")->delete();  

        // 注意：通常不建议直接根据 LIKE 匹配来删除数据，因为这可能会删除多条记录  
        // 如果您的业务逻辑确实需要这样做，请确保这是您想要的行为  

        if ($res) {  
            // 通常 delete 方法返回的是受影响的行数，而不是具体的记录  
            // 因此，这里的 $res 可能是一个数字，而不是具体的删除记录  
            $this->success('删除成功', $res);  
        } else {  
            $this->error('删除失败', $res);  
        }  
}   

    //编辑数据，根据id编辑
    public function edit_stu(){
        $id = input('id/d',0);
        $student_name = input('student_name','');
        $student_class = input('student_class','');
        $student_score = input('student_score','');
        $student_number = input('student_number','') ;
        if (!$id){
            $this->error('当前没有传入参数id');
        }

        // // 检查student_score是否在0到100之间  
        // if (!is_numeric($student_score) || $student_score < 0 || $student_score > 100) {  
        //     // 如果不在范围内，给出报错  
        //     $this->error('学生成绩必须在0到100之间');  
        // }
        
        // 检查student_score是否在0到100之间  
        if (!is_numeric($student_score) || $student_score < 0 || $student_score > 100) {  
            // 如果不在范围内，给出报错  
            $this->error('学生成绩必须在0到100之间');  
        }  
 
        $res = model('admin/student_score')->where('id',$id)->update(['student_name' =>$student_name,'student_class' =>$student_class,'student_score' =>$student_score,'student_number' =>$student_number,'updatetime'=>time()]);
        if ($res){
            $this->success('编辑成功',$res);
        }
        $this->error('编辑失败');
 
    }
    


    /**
     * 测试方法
     *
     * @ApiTitle    (测试名称)
     * @ApiSummary  (测试描述信息)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/demo/test/id/{id}/name/{name})
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="integer", required=true, description="会员ID")
     * @ApiParams   (name="name", type="string", required=true, description="用户名")
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function test()
    {
        $this->success('返回成功,这是0926最新代码', $this->request->param());
    }

    /**
     * 无需登录的接口
     *
     */
    public function test1()
    {
        $this->success('返回成功', ['action' => 'test1']);
    }

    /**
     * 需要登录的接口
     *
     */
    public function test2()
    {
        $this->success('返回成功', ['action' => 'test2']);
    }


    /**
     * 需要登录且需要验证有相应组的权限
     *
     */
    public function test3()
    {
        $this->success('返回成功', ['action' => 'test3']);
    }

}
